package cn.jdbc.TestFu.practicle;

import org.apache.commons.lang3.RandomStringUtils;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Test01 {
    public static void main(String[] args) throws Exception{
        // 1. 通过反射得到 CustomerService 的实例 c
        // 2. 调用实例 c 的 printRandomString 方法并正确输出结果
        Class<?> C = Class.forName("cn.jdbc.TestFu.practicle.Customer");
        Object cc = C.newInstance();
        Class<?> U = Class.forName("cn.jdbc.TestFu.practicle.UserSerivce");
        Object uu = U.newInstance();
        Field serivce = C.getDeclaredField("serivce");
        serivce.setAccessible(true);
        serivce.set(cc,uu);
        Method print = C.getMethod("print");
        print.invoke(cc);
    }
}
class Customer{
//不赋值会出现空指针异常
// 1. 调用 service 对象中的 randomString 并得到返回值
// 2. 打印该返回值
    private UserSerivce serivce;
    public void print(){
        String a = serivce.randomId();
        System.out.println(a);
    }
}
class  UserSerivce{
    // 2. 随机生成一个长度为 32 的字符串
    public String randomId(){
        String s = RandomStringUtils.randomAlphanumeric(32);
        return s;
    }
}
